home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / Unsorted / SamLP2.AMOS / SamLP2.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1995-12-28  |  4.7 KB  |  223 lines

  1. '
  2. ' SamLongPlay Procedures V2.0
  3. '
  4. ' Written by Christopher Hodges
  5. '
  6.  Extension_8_0A5E 1
  7. Trap Extension_8_0956 
  8.  Extension_8_0A6E 1
  9.  Extension_8_0A4C 1
  10. Dim SDAT(3,8)
  11. Global SDAT()
  12. Unpack 10 To 0
  13. For A=0 To 15
  14.   Get Block A+1,A*16,56,16,16
  15. Next 
  16. Ink 1,3 : Text 12,18,"SamLP V2.0. Written by Chris Hodges."
  17. Limit Mouse 128,Y Hard(0) To 447,Y Hard(55)
  18. Led Off : FILT=0
  19. F$=Command Line$
  20. If F$<>"" Then Gosub SAMLOAD Else Amos To Front 
  21. Do 
  22.   If SAMEXIST and MO=1 and PA=0
  23.     Gosub SAMREPLAY
  24.   Else 
  25.     If Amos Here
  26.       Multi Wait 
  27.       Gosub CHECKBUTTON
  28.     End If 
  29.   End If 
  30. Loop 
  31. SAMREPLAY:
  32.   LL=Min(L,LB)
  33.   If L-LL>0 and L-LL<LB/2 Then LL=LB/2
  34.   Sload V+1 To S+B*LB,LL
  35.   If FL
  36.     Sam Swap VV To S+B*LB,LL
  37.     SAMPL=0
  38.     While Sam Swapped(V)=0
  39.       I$=Inkey$
  40.       If I$=Cup$ : Add FREQ,1000 : SAMPSPEED[15,FREQ] : End If 
  41.       If I$=Cdown$ : Add FREQ,-1000 : SAMPSPEED[15,FREQ] : End If 
  42.       SAMPL=1
  43.       Multi Wait 
  44.       If Amos Here
  45.         Gosub CHECKBUTTON
  46.       End If 
  47.       Exit If SHIFT or SHUFT
  48.     Wend 
  49.     If SAMPL=0
  50.       Sam Stop VV : Sam Raw VV,S+B*LB,LL,FREQ
  51.       If Amos Here
  52.         Gosub CHECKBUTTON
  53.       End If 
  54.     End If 
  55.   Else 
  56.     Sam Raw VV,S+B*LB,LL,FREQ
  57.     FL=1
  58.   End If 
  59.   B=1-B
  60.   If SHUFT=0
  61.     Add L,-LL
  62.     If L=0 : Pof(V+1)=LOP : L=LS-LOP+1 : End If 
  63.   Else 
  64.     Add L,LL
  65.     If L>=LS : L=LL : End If 
  66.     Pof(V+1)=LS-L-LL+1
  67.   End If 
  68. Return 
  69. CHECKBUTTON:
  70.   If Timer>20 Then Timer=0 : Gosub DISPLAY
  71.   XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key
  72.   If MK=2 Then Amos To Back : Return 
  73.   If MO=0
  74.     Put Block 5,80,32
  75.   Else 
  76.     Put Block 13,80,32
  77.   End If 
  78.   If MK=0
  79.     If SHIFT>0
  80.       Put Block 4,64,32
  81.       MO=SHIFT-1
  82.       SHIFT=0
  83.     End If 
  84.     If SHUFT>0
  85.       Put Block 6,96,32
  86.       MO=SHUFT-1
  87.       SHUFT=0
  88.     End If 
  89.     Return 
  90.   End If 
  91.   If YM>31 and YM<48 and XM>7 and XM<144
  92.     If XM<24
  93.       Put Block 9,8,32
  94.       If SAMEXIST
  95.         Sam Stop VV
  96.         Close V+1
  97.         Erase BANK
  98.       End If 
  99.       Fade 1 : Wait 16
  100.        Extension_8_0966 
  101.       End 
  102.     End If 
  103.     P=(XM-32)/16 : XB=P*16+32
  104.     If P=0
  105.       Put Block 5,80,32
  106.       Put Block 10,XB,32
  107.       If SAMEXIST
  108.         Sam Stop VV
  109.         Close V+1
  110.         Erase BANK
  111.       End If 
  112.       F$="" : Gosub SAMLOAD
  113.       Put Block 2,XB,32
  114.     End If 
  115.     If P=5
  116.       Put Block 15-PA*8,XB,32
  117.       PA=1-PA
  118.       Repeat : Until Mouse Key=0
  119.     End If 
  120.     If P=6
  121.       FILT=1-FILT
  122.       Put Block 8+FILT*8,XB,32
  123.       If FILT=1 : Led On : Else Led Off : End If 
  124.       Repeat : Until Mouse Key=0
  125.     End If 
  126.     If SAMEXIST=0 : Return : End If 
  127.     If P=1 and MO>0
  128.       Put Block 11,XB,32
  129.       Sam Stop VV
  130.       MO=0 : Pof(V+1)=LOP : PA=0 : LL=0
  131.       Put Block 3,XB,32
  132.     End If 
  133.     If P=2
  134.       Put Block 12,XB,32
  135.       SHIFT=1+MO
  136.     End If 
  137.     If P=3
  138.       MO=1
  139.     End If 
  140.     If P=4
  141.       Put Block 14,XB,32
  142.       SHUFT=1+MO
  143.     End If 
  144.   End If 
  145. Return 
  146. DISPLAY:
  147.   If SAMEXIST
  148.     A$="TIME: "
  149.     T=(Pof(V+1)-LL)/FREQ
  150.     If T<600 : A$=A$+"0" : End If 
  151.     A$=A$+Mid$(Str$(T/60),2)+":"
  152.     If(T mod 60)<10 : A$=A$+"0" : End If 
  153.     A$=A$+Mid$(Str$(T mod 60),2)
  154.     If SAMPL or MO=0 or PA=1
  155.       If MO>0 and PA=0 : A$=A$+" PLAYING" : End If 
  156.       If MO=0 : A$=A$+" STOPPED" : End If 
  157.       If PA : A$=A$+" PAUSED." : End If 
  158.     Else 
  159.       Ink 6,3 : A$="SAMPLE INTERRUPTED"
  160.     End If 
  161.     Ink 1,3 : Text 156,42,A$
  162.   Else 
  163.     If SAMPL or MO=0 or PA=1
  164.       Ink 6,3 : Text 156,42,"   INSERT DISC     "
  165.     Else 
  166.       Ink 6,3 : Text 156,42,"SAMPLE INTERRUPTED!"
  167.     End If 
  168.   End If 
  169. Return 
  170. SAMLOAD:
  171.   SAMEXIST=0 : MO=0 : LL=0
  172.   If F$="" Then Amos To Front : F$=Fsel$("","","Please select a","Sound file")
  173.   If F$="" Then Return 
  174.   If Exist(F$)=0 Then Return 
  175.   V=0 : BANK=15 : BUF=64 : VV=3
  176.   Volume VV,63
  177.   Erase BANK : Reserve As Chip Work BANK,BUF*1048
  178.   Open In V+1,F$
  179.   LS=Lof(V+1) : LB=BUF*512
  180.   Ink 1,3 : Text 12,18, Extension_8_02F0(F$)+Space$(32-Len( Extension_8_02F0(F$)))
  181.   FREQ=15625
  182.   A$=Input$(1,4) : LOP=0
  183.   If Leek(Varptr(A$))=LS-6
  184.     A$=Input$(1,2)
  185.     FREQ=Deek(Varptr(A$))
  186.     LOP=6
  187.   End If 
  188.   If A$="FORM"
  189.     Repeat 
  190.       A$=Input$(1,4)
  191.     Until A$="VHDR"
  192.     A$=Input$(1,24)
  193.     FREQ=Deek(Varptr(A$)+16)
  194.     Repeat 
  195.       A$=Input$(1,4)
  196.     Until A$="BODY"
  197.     A$=Input$(1,4)
  198.     LOP=Pof(1)
  199.   End If 
  200.   Add LS,-Pof(1)
  201.   T=LS/FREQ
  202.   If T<600 Then A$="0" Else A$=""
  203.   A$=A$+Mid$(Str$(T/60),2)+":"
  204.   If(T mod 60)<10 Then A$=A$+"0"
  205.   A$=A$+Mid$(Str$(T mod 60),2)
  206.   Text 268,18,A$
  207.   B=0 : FL=0 : S=Start(BANK) : L=LS
  208.   SAMEXIST=1 : MO=1
  209. Return 
  210. SAMEND:
  211.   Fill S+B*LB To S+B*LB+LB,0
  212.   Sam Swap VV To S+B*LB,LB
  213.   While Sam Swapped(V)=0 : Wend 
  214.   Sam Stop VV
  215.   Close V+1
  216.   Erase BANK
  217. Return 
  218. Procedure SAMPSPEED[KANAL,FREQ]
  219.   RATE=3579545/FREQ
  220.   For A=0 To 3
  221.     If Btst(A,KANAL) Then Doke $DFF0A6+A*16,RATE
  222.   Next 
  223. End Proc